package Repositorio;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import Dados.Endereco;
import Dados.Pessoa;
import Dados.Telefone;

public class RepositorioPessoa {
	private Statement stmt;
	String sqlStatement;
	public RepositorioPessoa() {
		stmt = Conexao.getInstance().stmt;
	}
	public void cadastrarPessoa(Pessoa p) throws SQLException {
		sqlStatement = "INSERT INTO Pessoa VALUES('"+p.getCpf()+"','"+p.getNome()+"','"+p.getDataNascimento()+"',now())";
		stmt.executeUpdate(sqlStatement);
		Endereco end = p.getEndereco();
		sqlStatement = "INSERT INTO Endereco VALUES('"+p.getCpf()+"','"+end.getCep()+
		"','"+end.getLogradouro()+"','"+end.getNumero()+"','"+end.getComplemento()+
		"','"+end.getUf()+"','"+end.getCidade()+"','"+end.getBairro()+"')";
		stmt.executeUpdate(sqlStatement);
		Telefone tel[] = p.getTelefone();
		for(int i = 0; i < tel.length; i++) {
			sqlStatement = "INSERT INTO Telefone VALUES('"+p.getCpf()+"','"+
			tel[i].getTel()+"','"+tel[i].getTipoTel()+"')";
			stmt.executeUpdate(sqlStatement);	
		}
	}
	public void editarPessoa(Pessoa p) throws SQLException {
		sqlStatement = "UPDATE Pessoa SET Nome='"+p.getNome()+"',DataNascimento='"+p.getDataNascimento()+"' WHERE cpf='"+p.getCpf()+"'";
		stmt.executeUpdate(sqlStatement);
		Endereco end = p.getEndereco();
		sqlStatement = "UPDATE Endereco SET CEP='"+end.getCep()+"',Logradouro='"+end.getLogradouro()+
		"',Numero='"+end.getNumero()+"',Complemento='"+end.getComplemento()+
		"',UF='"+end.getUf()+"',Cidade='"+end.getCidade()+
		"',Bairro='"+end.getBairro()+"' WHERE cpf='"+p.getCpf()+"'";
		stmt.executeUpdate(sqlStatement);
		Telefone tel[] = p.getTelefone();
		for(int i = 0; i < tel.length; i++) {
			sqlStatement = "UPDATE Telefone SET Telefone='"+tel[i].getTel()+"',Tipo='"+tel[i].getTipoTel()+"' WHERE cpf='"+p.getCpf()+"' AND Telefone='"+tel[i].getTel()+"'";
			stmt.executeUpdate(sqlStatement);
		}
	}
	public void removerPessoa(String cpf) throws SQLException {
		RepositorioUsuario repUsuario = new RepositorioUsuario();
		RepositorioPaciente repPaciente = new RepositorioPaciente();
		if(!repUsuario.verificarUsuario(cpf) && !repPaciente.verificarPaciente(cpf)) {
			sqlStatement = "DELETE FROM Pessoa WHERE cpf ='"+cpf+"'";
			stmt.executeUpdate(sqlStatement);
		}
	}
	public Pessoa consultarPessoa(String cpf) throws SQLException {
		ResultSet rs;

		sqlStatement = "SELECT CEP, Logradouro, Numero, Complemento, UF, Cidade, Bairro FROM Endereco WHERE cpf='"+cpf+"'";
		rs = stmt.executeQuery(sqlStatement);
		rs.next();
		Endereco enderecoRetrieved = new Endereco(rs.getString("CEP"), rs.getString("Logradouro"), rs.getString("Numero"), rs.getString("Complemento"), rs.getString("UF"), rs.getString("Cidade"), rs.getString("Bairro"));

		sqlStatement = "SELECT count(*) FROM Telefone WHERE cpf='"+cpf+"'";
		rs = stmt.executeQuery(sqlStatement);
		rs.next();
		int telLength = rs.getInt("count(*)");
		Telefone telRetrieved[];
		telRetrieved = new Telefone[telLength];
		sqlStatement = "SELECT Telefone, Tipo FROM Telefone WHERE cpf='"+cpf+"'";
		rs = stmt.executeQuery(sqlStatement);
		int i = 0;
		while(rs.next()) {
			telRetrieved[i] = new Telefone(rs.getString("Telefone"), rs.getString("Tipo"));
			i++;
		}
		
		sqlStatement = "SELECT Nome, DataNascimento, DataCadastro FROM Pessoa WHERE cpf='"+cpf+"'";
		rs = stmt.executeQuery(sqlStatement);
		rs.next();
		Pessoa pessoa = new Pessoa(cpf, rs.getString("Nome"), rs.getDate("DataNascimento"), rs.getDate("DataCadastro"), enderecoRetrieved, telRetrieved);
		return pessoa;
	}
	public boolean verificarPessoa(String cpf) throws SQLException {
		boolean ret;
		sqlStatement = "SELECT * FROM Pessoa WHERE cpf='"+cpf+"'";
		ResultSet rs = stmt.executeQuery(sqlStatement);
		if(rs.next()) {
			ret = true;
		} else {
			ret = false;
		}
		return ret;
	}
}
